home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1994 December / PSL Monthly Shareware CD-ROM (Public Software Library)(December 1994).bin / prgmming / dos / c1 / julday.c < prev    next >
C/C++ Source or Header  |  1989-10-18  |  4KB  |  132 lines

  1. /* Julian Day program, by Brian E. Kessel (with assistance from Jim Perry).
  2.     Formulas derived from Astronomical Formulae for Calculators, fourth
  3.     edition, by Jean Meeus and Practical Astronomy with your Calculator,
  4.     third edition, by Peter Duffit Smith.    For more information on this
  5.     program and others like it, you may call my BBS, M-42 (314) 997-5157 */
  6.  
  7. #include <dos.h>
  8. #include <math.h>
  9. #include <conio.h>
  10.  
  11. main(int argc, char *argv[])
  12. {
  13.     struct date the_date;
  14.     struct time the_time;
  15.     int y, m, a, b, i;
  16.     int flag = 0;
  17.     long int temp, temp1;
  18.     double DDdd, YYYYMMDDdd, YYYY, MM, day, hour, minute, second, jd;
  19.     char *months[] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN",
  20.                             "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
  21.     char *s[10];
  22.     void info();
  23.  
  24.     clrscr();
  25.     lowvideo();
  26.     gotoxy(10,10);
  27.     if (argc<2) {                    /* if command line arg was not entered */
  28.         getdate(&the_date);     /* get the date from system clock */
  29.         gettime(&the_time);     /* get the time from system clock */
  30.  
  31.         YYYY=the_date.da_year;    /* assign year to YYYY */
  32.         MM=the_date.da_mon;        /* assign month to MM */
  33.         day=the_date.da_day;        /* assign day to day */
  34.  
  35.         hour=the_time.ti_hour;    /* hour */
  36.         minute=the_time.ti_min;    /* minute */
  37.         second=the_time.ti_sec;    /* second */
  38.         flag = 1;
  39.         cprintf("\n\rAt %.2d:%.2d:%.2d, on %d %s %d,", the_time.ti_hour,
  40.             the_time.ti_min, the_time.ti_sec, the_date.da_day,
  41.             months[the_date.da_mon - 1], the_date.da_year);
  42.  
  43.     }
  44.     else {
  45.         hour = atof(argv[1]);
  46.         if (hour < 0 || hour > 23)
  47.             info();
  48.         minute = atof(argv[2]);
  49.         if (minute < 0 || minute > 59)
  50.             info();
  51.         second = atof(argv[3]);
  52.         if (second < 0 || second > 59)
  53.             info();
  54.  
  55.         day = atof(argv[4]);
  56.         if (day < 1 || day > 31)
  57.             info();
  58.         MM = atof(argv[5]);
  59.         if (MM < 1 || MM > 12)
  60.             info();
  61.         if (MM == 2 && day > 29)
  62.             info();
  63.         YYYY = atof(argv[6]);
  64.         cprintf("\n\rAt %.2d:%.2d:%.2d, on %s %s %s,", atoi(argv[1]),
  65.             atoi(argv[2]), atoi(argv[3]),    argv[4], months[MM - 1], argv[6]);
  66.  
  67.     }
  68.  
  69.     DDdd = second/60.0;
  70.     DDdd += minute;
  71.     DDdd = DDdd/60.0;
  72.     DDdd += hour;                    /* convert time to decimal hours */
  73.     DDdd = DDdd/24.0;                /* convert to fraction of day */
  74.     DDdd += day;                    /* add day, for decimal day number */
  75.  
  76.     YYYYMMDDdd = day*.0001;
  77.     YYYYMMDDdd += MM*.01;
  78.     YYYYMMDDdd += YYYY;            /* create the number YYYY.MMDD */
  79.  
  80.     if (MM>2) {              /* if month is greater than 2 */
  81.         y = YYYY;
  82.         m = MM;
  83.     }
  84.  
  85.     if ((MM == 1) || (MM == 2)){        /* if month is 1 or 2 */
  86.         y = YYYY - 1;
  87.         m = MM + 12;
  88.     }
  89.  
  90.     if (YYYYMMDDdd >= 1582.1015) {  /* is the date in the Gregorian Calendar */
  91.         a = y / 100;
  92.         b = 2 - a + (a / 4);
  93.         temp = 365.25 * y;
  94.         temp1 = 30.6001 * (m + 1);
  95.         jd = temp + temp1 + DDdd + 1720994.5 + b;
  96.     }
  97.     else {
  98.         temp = 365.25 * y;
  99.         temp1 = 30.6001 * (m + 1);
  100.         jd = temp + temp1 + DDdd + 1720994.5;
  101.     }
  102.  
  103.     highvideo();
  104.     cprintf(" the Julian Day is %.5f.\n\r", jd);
  105.     lowvideo();
  106.     if (jd > 2400000.5)
  107.         cprintf("                    (The Modified Julian Day is %.5f.)\n\r",
  108.                                                   jd-2400000.5);
  109.  
  110.     if (flag)
  111.         info();
  112.  
  113.     for (i = 0; i < 11; i++)
  114.         cprintf("\n\r");
  115.     normvideo();
  116.     exit(0);
  117. }
  118.  
  119. /*==========================================================================*/
  120. void info(void)
  121. {
  122.     int i;
  123.  
  124.     lowvideo();
  125.     cputs("\n\rFor a specific Julian Day, use the following format:");
  126.     cputs("\n\r         julday HH MM SS DD MM YYYY");
  127.     for (i = 0; i < 7; i++)
  128.         cprintf("\n\r");
  129.     normvideo();
  130.     exit(0);
  131. }
  132.